#在 Python 中，使用 def 关键字定义函数：
def my_function():
  print("Hello from a function")
#调用
my_function()
#输出：Hello from a function

#参数
def my_function(fname):
  print('您好' + fname )

my_function("小明")
#输出：您好小明

#如果我们调用了不带参数的函数，则使用默认值：
def my_function(country = "China"):
  print("I am from " + country)

my_function("India")
#输出：I am from India
my_function()
#输出：I am from China

#函数的参数可以是任何数据类型（字符串、数字、列表、字典等），并且在函数内其将被视为相同数据类型。
def my_function(food):
  for x in food:
    print(x)

fruits = ["apple", "banana", "cherry"]

my_function(fruits)
#输出：apple banana cherry

#如需使函数返回值，请使用 return 语句：
def my_function(x):
  return 5 * x

print(my_function(4))
#输出：20

#您还可以使用 key = value 语法发送参数。参数的顺序无关紧要。
def my_function(child3, child2, child1):
  print("你好" + child3)

my_function(child1 = "小明", child2 = "小红", child3 = "小黑")
#输出：你好小黑


#如果您不知道将传递给您的函数多少个参数，请在函数定义的参数名称前添加 *
def my_function(*kids):
  print("你好 " + kids[2])

my_function("小明", "小红", "小黑")
#输出：你好 小黑

#Python 也接受函数递归，这意味着定义的函数能够调用自身。
def tri_recursion(k):
  if(k>0):
    result = k+tri_recursion(k-1)
    print(result)
  else:
    result = 0
  return result

tri_recursion(6)
#输出：1 3 6 10 15 21

#函数调用高级用法
def new_tips(argv):
  def tips(func):
    def nei(a, b):
      print('start %s %s' % (argv, func.__name__))
      func(a, b)
      print('stop')

    return nei
  return tips

# 执行add函数时调用new_tips函数
@new_tips('add_module')
def add(a, b):
  print(a + b)


print(add(4, 5))
#输出： start add_module add  9 stop None




